<!DOCTYPE html>
<html lang="zh-cn">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>利用Excel制作动态甘特图 | 嚣张协奏曲-blog</title>

    
<link href="/favicon.ico" rel="shortcut icon" type="image/x-icon" />




<meta name="author" content="嚣张协奏曲" />
<meta name="description" content="甘特图是一种用来显示项目进度的图，用来制定计划、进度控制可以非常直观的看到变化，有利于项目计划按预期执行。
" />



<meta name="generator" content="Hugo 0.79.1" />

<link rel="canonical" href="https://xzxzq.gitee.io/posts/excelAndGantt/" />


<meta property="og:title" content="利用Excel制作动态甘特图" />
<meta property="og:description" content="甘特图是一种用来显示项目进度的图，用来制定计划、进度控制可以非常直观的看到变化，有利于项目计划按预期执行。" />
<meta property="og:type" content="article" />
<meta property="og:url" content="https://xzxzq.gitee.io/posts/excelAndGantt/" />
<meta property="article:published_time" content="2021-04-15T16:41:33+08:00" />
<meta property="article:modified_time" content="2021-04-15T16:41:33+08:00" />



<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="利用Excel制作动态甘特图"/>
<meta name="twitter:description" content="甘特图是一种用来显示项目进度的图，用来制定计划、进度控制可以非常直观的看到变化，有利于项目计划按预期执行。"/>


<link rel="stylesheet" href="/css/semantic.min.css" />
<link rel="stylesheet" href="/css/icomoon.css" />
<link rel="stylesheet" href="/css/OverlayScrollbars.min.css" />
<link rel="stylesheet" href="/css/github-markdown.css" />
<link rel="stylesheet" href="/css/site.css" />

<style>
  a:hover {
    text-decoration: underline; 
  }

  
  a {
    color: seagreen !important;
  }
  

  
  .inverted a,
  .inverted a:hover {
     color: darkseagreen !important;
  }
  

  
  body.default {
    
    background-color: glay;
    

    
    background-image: url(/img/city_night.gif);
    
  }
  

  
</style>

    


  
    <link rel="stylesheet" data-highlight href="https://cdn.jsdelivr.net/gh/highlightjs/cdn-release/build/styles/gruvbox-light.min.css" />
  





  </head>

  <body class="default">
    
<nav class="ui secondary inverted menu dream-menu">

  <div class="item">
    <i class="large link bullseye icon dream-flip-toggle" title="翻转！"></i>
  </div>
  <div class="item">
    <i class="large link home icon" title="首页" onclick="window.location.href = 'https:\/\/xzxzq.gitee.io\/'"></i>
  </div>
  <div class="item">
    <i class="large link icon theme-switch" onclick="themeSwitch()"></i>
  </div>
  
</nav>

    <div class="flip-container">
      <div class="flipper">
        <section class="front">
          <div class="dream-max-width">
            
<div class="ui centered relaxed grid dream-grid">
  <div class="sixteen wide mobile sixteen wide tablet twelve wide computer column markdown-body dream-single" id="dream-save-post-as-img">
    
    <section class="ui top attached segment">
      <header>
        <h1 class="ui large header">
          利用Excel制作动态甘特图
          <div class="sub header">
            @
            
              
                嚣张协奏曲
              
            

            | 
                星期四，四月 15 日，2021 年
              

            | 5 分钟阅读

            | 更新于
              
                星期四，四月 15 日，2021 年
              
          </div>
        </h1>
      </header>

      <article class="main"><p>甘特图是一种用来显示项目进度的图，用来制定计划、进度控制可以非常直观的看到变化，有利于项目计划按预期执行。</p>
<p>网络上由很多制作甘特的特图的方式，但是大多不能随着任务增加减少自动做出修改。但对于我来说，任务是经常会变的，而且会变多变细，所以需要一个能够响应数据表格数据量的图表。下面就是我记录的制作gantt图的步骤。</p>
<h2 id="1创建表格">1、创建表格</h2>
<p>首先要知道甘特图里面最主要的几个数据项</p>
<ul>
<li>任务名称</li>
<li>开始时间</li>
<li>结束时间</li>
</ul>
<p>所以先要用excel创建一个表格，表头至少包含上面三项，也就是plan、start、end</p>
<table>
<thead>
<tr>
<th>plan</th>
<th>start</th>
<th>end</th>
</tr>
</thead>
<tbody>
<tr>
<td>xxx</td>
<td>2021/4/19</td>
<td>2021/4/20</td>
</tr>
</tbody>
</table>
<p>其中结束时间可以由开始时间和预计花费时间计算得来也就是</p>
<pre><code>end=start+spend
</code></pre><p>考虑到可能会有延期时间，可以把公式更改成</p>
<pre><code>end=start+spend+delay
</code></pre><p>所以建议创建表格形式为</p>
<table>
<thead>
<tr>
<th>plan</th>
<th>start</th>
<th>end</th>
<th>spend</th>
<th>delay</th>
</tr>
</thead>
<tbody>
<tr>
<td>xxx</td>
<td>2021/4/19</td>
<td>2021/4/20</td>
<td>1</td>
<td>0</td>
</tr>
</tbody>
</table>
<p>如图：</p>
<p><img src="https://gitee.com/xzxzq/img/raw/master/image/1.png" alt="1"></p>
<p>在新建的excel表格中绘制表格，表格位置可以是任意的。这里我用的是按横轴A到E、纵轴1开始为例。</p>
<h2 id="2添加公式">2、添加公式</h2>
<h3 id="21结束时间">2.1、结束时间</h3>
<p>为了让结束时间的公式成立，首先需要选中end列非表头的第一个单元格，更改里面的值为公式</p>
<pre><code>=B2+D2+E2
</code></pre><p><img src="https://gitee.com/xzxzq/img/raw/master/image/2.png" alt="2"></p>
<p>可以在上方的导航栏里编写公式更方便，先敲入<code>=</code>然后可以直接在表格中选取单元格，可以更快速地输入公式。填完公式后，鼠标在这个包含公式的单元格右下角悬浮，会发发现鼠标变成十字准星，点击往下拉可以把这个公式应用到下面的单元格。下面的单元格操作同理。</p>
<h3 id="22开始时间">2.2、开始时间</h3>
<p>一般来说，任务的结束时间点就是下一个开始点。所以我们可设置<code>start = end</code>，也就是下一行的开始时间等于上一行的结束时间，而第一行的开始时间必须要是确定。</p>
<p>更改第二行的<code>start</code>的内容为公式</p>
<pre><code>=C2
</code></pre><p><img src="https://gitee.com/xzxzq/img/raw/master/image/3.png" alt="3"></p>
<p>下拉单元格来将公式应用到其他行。</p>
<h3 id="23动态选区">2.3、动态选区</h3>
<p>这一步是比较麻烦的一步，但如果想让生成的甘特图可以随着数据表的任务数量的变化而变化，这一步不能少。如果任务数量已经确定了，那么可以省略这一步。</p>
<p>动态选取意思是选取的范围会随着数据的新增和减少而变化。普通选区就是，通过鼠标划动选择出现的虚线框框选的范围，这个范围是固定的不能变化的。生成图表需要指定数据范围，这个范围可以是一个选区。所以如果使用静态选区，那么对于任务量不确定的计划，就需要在每次新增或者减少任务之后，再次修改甘特图的数据选区，十分麻烦。而制作动态选区就需要用<code>公式名称</code>，对于目前的甘特图来说需要为每一列都制作一个，其中<code>end</code>列可以不做。</p>
<p>制作动态选区需要用到三个公式：</p>
<ul>
<li>OFFSET 偏移函数，选取一段范围的选区</li>
<li>COUNT 统计数字类型非空单元格个数</li>
<li>COUNTA 统计非空单元格个数</li>
</ul>
<p>首先鼠标点击<em>菜单栏&raquo;公式&raquo;名称管理器</em>，打开<em>名称管理器</em></p>
<p><img src="https://gitee.com/xzxzq/img/raw/master/image/7.png" alt="7"></p>
<p>点击<em>新建名称</em></p>
<ul>
<li>
<p><em>名称</em>填写为列名就好了，怎么简单怎么来</p>
</li>
<li>
<p><em>范围</em>选择当前sheet的名称，可以避免名称冲突</p>
</li>
<li>
<p><em>批注</em>可以不写</p>
</li>
<li>
<p><em>引用范围</em>填写以下公式</p>
</li>
</ul>
<pre><code>// plan列的公式
=OFFSET(Sheet1!$A$1,1,,COUNTA(Sheet1!$A:$A)-1)
// start列的公式
=OFFSET(Sheet1!$B$1,1,,COUNT(Sheet1!$B:$B))
// end列的公式
=OFFSET(Sheet1!$C$1,1,,COUNT(Sheet1!$C:$C))
// spend列的公式
=OFFSET(Sheet1!$D$1,1,,COUNT(Sheet1!$D:$D))
// delay列的公式
=OFFSET(Sheet1!$E$1,1,,COUNT(Sheet1!$E:$E))
</code></pre><p><img src="https://gitee.com/xzxzq/img/raw/master/image/4.png" alt="4"></p>
<p>可以发现，除了pan列的公式有所不同，其他几列都大致相同。</p>
<p>都新增完了之后可以通过，将鼠标点击在<em>名称管理器</em>下方的<em>引用位置</em>里观察选区的范围，会在数据表的列上出现虚线框。注意只需要点选一次就能看到。</p>
<p><img src="https://gitee.com/xzxzq/img/raw/master/image/5.png" alt="5"></p>
<p><img src="https://gitee.com/xzxzq/img/raw/master/image/6.png" alt="6"></p>
<p>观察到选区的范围无误，这一步算是结束了。</p>
<h2 id="3生成图表">3、生成图表</h2>
<p>目前的excel里面没有现成gantt图表，所以需要用条形图来代替。</p>
<h3 id="31创建条形图">3.1、创建条形图</h3>
<p>点击<em>菜单栏&raquo;插入</em>，找到条形图的图标按钮——悬浮在上面可以看到<em>插入柱形图和条形图</em>提示，点击进入<em>选择图表&raquo;二维条形图&raquo;堆积条形图</em>，找不到可以悬浮按钮上看提示。</p>
<p>点击创建条形图</p>
<p><img src="https://gitee.com/xzxzq/img/raw/master/image/8.png" alt="8"></p>
<h3 id="32选择数据">3.2、选择数据</h3>
<p>在新生成的图区右键<em>选择数据</em></p>
<p><img src="https://gitee.com/xzxzq/img/raw/master/image/9.png" alt="9"></p>
<p>先看到左下部分的<em>图例项（系列）<em>栏，点击</em>添加</em></p>
<p>在弹出的<em>编辑数据系列</em>窗口中，<em>系列名称</em>可以直接点击列名单元格选取，<em>系列值</em>需要输入公式，如下</p>
<pre><code>=Sheet1!start
</code></pre><p><em>Sheet1</em>是指当前sheet页的名称，后面的<em>plan</em>是前面设定的公式名称，代表着plan这一列的选区。</p>
<p>其他以此类推，分别新建</p>
<ul>
<li>start</li>
<li>spend</li>
<li>delay</li>
</ul>
<p><img src="https://gitee.com/xzxzq/img/raw/master/image/11.png" alt="11"></p>
<p>再看到右边<em>水平（分类）轴标签</em>，正常情况下，在左边新建<em>系列</em>后excel会自动在右边生成<em>轴标签</em>，但是这个不是动态的选区，所以还需要手动修改。</p>
<p>左边的每一个<em>系列</em>，在右边都会有一个<em>轴标签</em>，所以需要依次点击左边的<em>系列</em>，再编辑<em>轴标签</em></p>
<p>编辑窗口只有一个输入格，里面只需要填入公式即可，如下</p>
<pre><code>=Sheet1!plan
</code></pre><p>这个公式的含义和上面一样，只不过一定要是计划名称的选区</p>
<p><img src="https://gitee.com/xzxzq/img/raw/master/image/12.png" alt="12"></p>
<p><img src="https://gitee.com/xzxzq/img/raw/master/image/10.png" alt="10"></p>
<p>完成后点击确定就可以生成一个堆积条形图</p>
<p><img src="https://gitee.com/xzxzq/img/raw/master/image/13.png" alt="13"></p>
<h2 id="4修改图表样式">4、修改图表样式</h2>
<p>这个图还不是想要的gantt图样式，需要进行修改。</p>
<p>在纵轴右键，选择最下面的<em>设置坐标轴格式</em>，注意要点到坐标轴才会出现这个选项</p>
<p><img src="https://gitee.com/xzxzq/img/raw/master/image/14.png" alt="14"></p>
<p>在右边会出现设置项</p>
<p>点击条形图的图标按钮，点击<em>坐标轴选项</em>，勾选逆序类别</p>
<p><img src="https://gitee.com/xzxzq/img/raw/master/image/15.png" alt="15"></p>
<p>可以看到图表上下位置已经颠倒</p>
<p><img src="https://gitee.com/xzxzq/img/raw/master/image/16.png" alt="16"></p>
<p>点击图表中代表开始时间的条块，相应的右边的设置项会改变</p>
<p>点击<em>油桶图标&raquo;填充</em>，选择<em>无填充</em></p>
<p>点击<em>边框</em>，选择<em>无线条</em></p>
<p><img src="https://gitee.com/xzxzq/img/raw/master/image/17.png" alt="17"></p>
<p>可以发现，现在图标已经将开始时间的条块隐藏了</p>
<p><img src="https://gitee.com/xzxzq/img/raw/master/image/18.png" alt="18"></p>
<p>这个时候，可以将下方多余start图例给删掉了，直接点选<em>Del</em>即可</p>
<p>点击横轴，相应的右边的设置项会改变</p>
<p><img src="https://gitee.com/xzxzq/img/raw/master/image/19.png" alt="19"></p>
<p>选择条形图图标，<em>坐标轴选项</em>里设置<em>边界-最小值</em>，把这个值填写为第一个开始的任务的日期就行了</p>
<p><img src="https://gitee.com/xzxzq/img/raw/master/image/20.png" alt="20"></p>
<p>到此一个简单的，可随表格数据响应的甘特图就创建完了</p></article>
    </section>

    <footer class="ui attached segment dream-tags" data-html2canvas-ignore>
      
        
          <a class="ui label" href="/tags/excel" title="excel">excel</a>
        
          <a class="ui label" href="/tags/gantt" title="gantt">gantt</a>
        
      
      <div
        class="ui label"
        style="float: right; cursor: pointer;"
        onclick="savePostAsImg()">
        <i class="save icon"></i>保存为图片
      </div>
    </footer>

    
      <footer class="ui attached segment" data-html2canvas-ignore>
        本作品采用<a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/">知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议</a>进行许可。
      </footer>
    

    
    
    
      <div class="ui segment utterances-comments" data-html2canvas-ignore>
        <script src="https://utteranc.es/client.js"
          repo="xzxzq/SocialComments"
          issue-term="og:title"
          theme="github-light"
          crossorigin="anonymous"
          async>
        </script>
      </div>
    

    

  </div>
  <aside class="sixteen wide mobile sixteen wide tablet four wide computer column dream-single-aside">
    
    
      <div class="ui segment toc">
        <nav id="TableOfContents">
  <ul>
    <li><a href="#1创建表格">1、创建表格</a></li>
    <li><a href="#2添加公式">2、添加公式</a>
      <ul>
        <li><a href="#21结束时间">2.1、结束时间</a></li>
        <li><a href="#22开始时间">2.2、开始时间</a></li>
        <li><a href="#23动态选区">2.3、动态选区</a></li>
      </ul>
    </li>
    <li><a href="#3生成图表">3、生成图表</a>
      <ul>
        <li><a href="#31创建条形图">3.1、创建条形图</a></li>
        <li><a href="#32选择数据">3.2、选择数据</a></li>
      </ul>
    </li>
    <li><a href="#4修改图表样式">4、修改图表样式</a></li>
  </ul>
</nav>
      </div>
    

    <article class="dream-header">
  <section class="ui top attached center aligned segment">
    <div class="ui small circular image">
      
        <img src="/img/head.jpg">
      
    </div>

    
    <div class="ui medium header">
    
      嚣张协奏曲 的博客
      <div class="sub header" style="margin-top: 0.5rem;">百无禁忌</div>
    
    </div>
    

    <div class="ui horizontal list">
      
      <a class="item" href="/posts">
        <i class="archive icon" title="归档"></i>
      </a>
      
      <a class="item" href="/tags">
        <i class="tags icon" title="所有标签"></i>
      </a>
      <a class="item" href="/categories">
        <i class="th list icon" title="所有分类"></i>
      </a>
    </div>
  </section>

  
  <section class="ui attached center aligned segment dream-tags">
    
      
      
      <a class="ui label" href="/tags/IDEA/" title="I D E A">
        I D E A
      </a>
    
      
      
      <a class="ui label" href="/tags/Maven/" title="Maven">
        Maven
      </a>
    
      
      
      <a class="ui label" href="/tags/Tomcat/" title="Tomcat">
        Tomcat
      </a>
    
      
      
      <a class="ui label" href="/tags/excel/" title="Excel">
        Excel
      </a>
    
      
      
      <a class="ui label" href="/tags/gantt/" title="Gantt">
        Gantt
      </a>
    
      
      
      <a class="ui label" href="/tags/gitee/" title="Gitee">
        Gitee
      </a>
    
      
      
      <a class="ui label" href="/tags/github/" title="Github">
        Github
      </a>
    
      
      
      <a class="ui label" href="/tags/hugo/" title="Hugo">
        Hugo
      </a>
    
      
      
      <a class="ui label" href="/tags/java/" title="Java">
        Java
      </a>
    
      
      
      <a class="ui label" href="/tags/maven/" title="Maven">
        Maven
      </a>
    
  </section>
  

  
  <section class="ui attached segment dream-categories">
    <div class="ui accordion">
      
      
      
      
      

      
        

        
          <div class="title">
            <i class="dropdown icon"></i>
            
            
            <a class="item" href="/categories/Excel%E6%8A%80%E5%B7%A7/" title="Excel技巧">
              Excel技巧
            </a>
          </div>
          <div class="content">
            <div class="ui list">
            
              <div class="item">
                <div class="content">
                  <a class="item" href="/posts/excelAndGantt/">利用Excel制作动态甘特图</a>
                </div>
              </div>
            
            </div>
          </div>
        
      
        

        
          <div class="title">
            <i class="dropdown icon"></i>
            
            
            <a class="item" href="/categories/HUGO%E6%95%99%E7%A8%8B/" title="H U G O教程">
              H U G O教程
            </a>
          </div>
          <div class="content">
            <div class="ui list">
            
              <div class="item">
                <div class="content">
                  <a class="item" href="/posts/buildBlogByHugo/">HUGO-静态博客的利器</a>
                </div>
              </div>
            
            </div>
          </div>
        
      
        

        
          <div class="title">
            <i class="dropdown icon"></i>
            
            
            <a class="item" href="/categories/%E9%97%AE%E9%A2%98%E8%AE%B0%E5%BD%95/" title="问题记录">
              问题记录
            </a>
          </div>
          <div class="content">
            <div class="ui list">
            
              <div class="item">
                <div class="content">
                  <a class="item" href="/posts/lombok_error_12282020/">使用Lombok时出现错误</a>
                </div>
              </div>
            
              <div class="item">
                <div class="content">
                  <a class="item" href="/posts/problem_1/">执行junit单元测试出错</a>
                </div>
              </div>
            
            </div>
          </div>
        
      

      
    </div>
  </section>
  

  <section class="ui attached segment header-socials">
    <nav class="ui secondary menu dream-menu dream-socials">
  
  
    <div class="item">
      <a href="mailto:alonealive@foxmail.com">
        <i class=" mail icon" title="Email"></i>
      </a>
    </div>
  

  

  

  

  

  

  
    <div class="item">
      <a href="https://github.com/https://github.com/xzxzq" target="_blank">
        <i class=" github icon" title="GitHub"></i>
      </a>
    </div>
  

  

  
</nav>

  </section>

  <section class="ui bottom attached center aligned segment">
    
      <p>© 2020 - 2021 嚣张协奏曲-blog</p>
    

    <p>Powered by <a href="https://gohugo.io/" target="_blank">Hugo</a> with theme <a href="https://github.com/g1eny0ung/hugo-theme-dream" target="_blank">Dream</a>.</p>

    
  </section>
</article>

  </aside>
</div>

          </div>
        </section>
        <section class="back">
          <div class="dream-max-width">
            <div class="ui centered relaxed grid dream-grid dream-back">
  
  
  
    <section class="sixteen wide mobile eight wide tablet four wide computer column dream-column">
      <article>
        <div class="ui top attached segment">
          <h3 class="ui header">关于我</h3>
        </div>
        <div class="ui bottom attached segment markdown-body">
          <p>这个世界很大也总在变化，抓不住的是时间，留得下的是回忆。这个角落是个博客，有的只是一段凝固的时光，有的只是时代尘埃的一个喘息。</p>

        </div>
      </article>
    </section>
  

  <section class="sixteen wide mobile eight wide tablet four wide computer column dream-column">
    <article>
      <div class="ui top attached segment">
        <h3 class="ui header">社交链接</h3>
      </div>
      <div class="ui bottom attached segment">
        <nav class="ui secondary menu dream-menu dream-socials">
  
  
    <div class="item">
      <a href="mailto:alonealive@foxmail.com">
        <i class="large mail icon" title="Email"></i>
      </a>
    </div>
  

  

  

  

  

  

  
    <div class="item">
      <a href="https://github.com/https://github.com/xzxzq" target="_blank">
        <i class="large github icon" title="GitHub"></i>
      </a>
    </div>
  

  

  
</nav>

      </div>
    </article>
  </section>

  <section class="sixteen wide mobile eight wide tablet four wide computer column dream-column">
    
      <footer class="ui segment">
        本作品采用<a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/">知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议</a>进行许可。
      </footer>
    
  </section>

  
  
</div>

          </div>
        </section>
      </div>
    </div>

    <script>
  window.backgroundDark =  null 
  window.backgroundImageDark =  null 
  window.darkNav =  true 
  window.hasTwitterEmbed =  null 

  if (window.hasTwitterEmbed) {
    
    window.twttr = (function (d, s, id) {
      var js,
        fjs = d.getElementsByTagName(s)[0],
        t = window.twttr || {}
      if (d.getElementById(id)) return t
      js = d.createElement(s)
      js.id = id
      js.src = 'https://platform.twitter.com/widgets.js'
      fjs.parentNode.insertBefore(js, fjs)

      t._e = []
      t.ready = function (f) {
        t._e.push(f)
      }

      return t
    })(document, 'script', 'twitter-wjs')
  }
</script>
<script src="/js/jquery.min.js"></script>
<script src="/js/semantic.min.js"></script>
<script src="/js/jquery.overlayScrollbars.min.js"></script>
<script src="/js/header.js"></script>
<script src="/js/main.js"></script>
<script src="/js/theme.js"></script>

    
<script src="/js/html2canvas.min.js"></script>
<script src="/js/post.js"></script>


  <script src="https://cdn.jsdelivr.net/gh/highlightjs/cdn-release/build/highlight.min.js"></script>

  
    
      <script src="https://cdn.jsdelivr.net/gh/highlightjs/cdn-release/build/languages/ocaml.min.js"></script>
     
  

  <script>
  hljs.initHighlightingOnLoad()
  setHighlightTheme()

  function setHighlightTheme() {
    var isDark = localStore.getItem('hugo-theme-dream-is-dark')
    var lightTheme = "gruvbox-light"
    var darkTheme = "gruvbox-dark"
    var theme = isDark ? darkTheme : lightTheme

    $('link[data-highlight]').attr('href', 'https://cdn.jsdelivr.net/gh/highlightjs/cdn-release/build/styles/' + theme + '.min.css')
    $('pre').css('background', isDark ? '#333' : '')
  }
</script>





    

    
  </body>
</html>
